package com.dhcc.crftool.enums;

/**
 * HTTP状态码
 * @author felix
 */
public enum ResultStatusEnum {
    /**
     * 200 请求成功
     */
    OK(200, "OK", "请求成功！"),
    /**
     * 201 创建或者修改数据成功
     */
    CREATED(201, "CREATED", "资源创建成功！"),
    /**
     * 204 删除数据成功
     */
    NO_CONTENT(204, "NO CONTENT", "服务器成功处理了请求，但不需要返回任何实体内容！"),
    /**
     * 400 请求有错误
     */
    INVALID_REQUEST(400, "INVALID REQUEST", "请求失败,具体查看返回业务状态码与对应消息！"),
    /**
     * 401 没有权限
     */
    UNAUTHORIZED(401, "Unauthorized", "请求失败,未经过身份认证！"),
    /**
     * 403 用户访问被禁止（已经授权）
     */
    FORBIDDEN(403, "Forbidden", "用户访问被禁止！"),
    /**
     * 404 请求不存在
     */
    NOT_FOUND(404, "NOT FOUND", "请求不存在！"),

    /**
     * 405 请求方法不支持
     */
    NOT_SUPPORT(405, "Not Support", "请求方法不支持！"),
    /**
     * 500 服务器发生错误
     */
    INTERNAL_SERVER_ERROR(500, "INTERNAL SERVER ERROR", "服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理！")
    ;

    private Integer code;
    private String name;
    private String msg;

    ResultStatusEnum(Integer code, String name, String msg) {
        this.code = code;
        this.name = name;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public static ResultStatusEnum getByCode(Integer code){
        if(code == null){
            // 默认返回200
            return ResultStatusEnum.OK;
        }

        ResultStatusEnum[] types = ResultStatusEnum.values();
        for (ResultStatusEnum type : types) {
            if(type.code.equals(code)){
                return type;
            }
        }

        return ResultStatusEnum.OK;
    }

}
